--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / ChangelogModal.vue
Displaying Raw • Download
meshchatx/src/frontend/components/ChangelogModal.vue 9c739fa940d1bcaefcd5de9a3b461762a7200103 (9c739fa9) Text, 12.54 KB
T8b949e<!-- SPDX-License-Identifier: 0BSD -->
Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72v-dialog
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3isPageTa5d6ff"
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3visibleTa5d6ff"
Tb4b4b4:Te6edf3fullscreenTff7b72=Ta5d6ff"Te6edf3dialogFullscreenTa5d6ff"
Te6edf3max-widthTff7b72=Ta5d6ff"800"
Te6edf3scrollable
Te6edf3transitionTff7b72=Ta5d6ff"dialog-bottom-transition"
Te6edf3classTff7b72=Ta5d6ff"changelog-dialog"
Tb4b4b4@Te6edf3updateTb4b4b4:Te6edf3model-valueTff7b72=Ta5d6ff"Te6edf3onVisibleUpdateTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-card
Te6edf3classTff7b72=Ta5d6ff"flex min-h-0 flex-1 flex-col bg-white dark:bg-zinc-900 border-0 overflow-hidden h-full max-h-dvh"
Tb4b4b4>
T8b949e<!-- Header -->
Tb4b4b4<Tff7b72v-toolbar Te6edf3flat Te6edf3colorTff7b72=Ta5d6ff"transparent" Te6edf3classTff7b72=Ta5d6ff"px-3 sm:px-4 border-b dark:border-zinc-800 shrink-0"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-1 mr-3"Tb4b4b4>
Tb4b4b4<Tff7b72img Te6edf3srcTff7b72=Ta5d6ff"../public/favicons/favicon-512x512.png" Te6edf3classTff7b72=Ta5d6ff"w-8 h-8 object-contain" Te6edf3altTff7b72=Ta5d6ff"Logo" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-toolbar-title Te6edf3classTff7b72=Ta5d6ff"text-xl font-bold tracking-tight text-gray-900 dark:text-white"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.changelog_title"Tb4b4b4, Ta5d6ff"What's New"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72v-toolbar-titleTb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3versionTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"ml-3 font-black text-[10px] px-2 h-5 tracking-tighter uppercase rounded-xs bg-blue-600 text-white inline-flex items-center"
Tb4b4b4>
vTff7b72{{ Te6edf3version Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-spacerTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-spacerTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"v-btn text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/10 p-2 transition-colors"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3closeTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72v-iconTb4b4b4>mdi-closeTb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-toolbarTb4b4b4>
T8b949e<!-- Content -->
Tb4b4b4<Tff7b72v-card-text Te6edf3classTff7b72=Ta5d6ff"flex-1 min-h-0 overflow-y-auto overscroll-contain px-4 py-6 sm:px-6 sm:py-8"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3loadingTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center justify-center h-full space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72v-progress-circular Te6edf3indeterminate Te6edf3colorTff7b72=Ta5d6ff"blue" Te6edf3sizeTff7b72=Ta5d6ff"64"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-progress-circularTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-zinc-400 font-medium"Tb4b4b4>Loading changelog...Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3errorTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center justify-center h-full text-center space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-alert-circle-outline" Te6edf3sizeTff7b72=Ta5d6ff"64" Te6edf3colorTff7b72=Ta5d6ff"red"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-red-500 font-bold text-lg"Tb4b4b4>Tff7b72{{ Te6edf3error Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"primary-chip px-6!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3fetchChangelogTa5d6ff"Tb4b4b4>RetryTb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"changelog-content max-w-none prose dark:prose-invert text-gray-900 dark:text-zinc-100"
Tb4b4b4>
T8b949e<!-- eslint-disable-next-line vue/no-v-html -->
Tb4b4b4<Tff7b72div Te6edf3v-htmlTff7b72=Ta5d6ff"Te6edf3changelogHtmlTa5d6ff"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-card-textTb4b4b4>
T8b949e<!-- Footer -->
Tb4b4b4<Tff7b72v-divider Te6edf3classTff7b72=Ta5d6ff"dark:border-zinc-800"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-dividerTb4b4b4>
Tb4b4b4<Tff7b72v-card-actions
Te6edf3classTff7b72=Ta5d6ff"px-4 py-3 sm:px-6 sm:py-4 bg-gray-50 dark:bg-zinc-950/50 flex-wrap gap-y-2 shrink-0 pb-[max(0.75rem,env(safe-area-inset-bottom))]"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col"Tb4b4b4>
Tb4b4b4<Tff7b72v-checkbox
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3dontShowAgainTa5d6ff"
Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'app.do_not_show_again'Tb4b4b4, Ta5d6ff'Do not show again for this version'Tb4b4b4)Ta5d6ff"
Te6edf3densityTff7b72=Ta5d6ff"compact"
Te6edf3hide-details
Te6edf3colorTff7b72=Ta5d6ff"blue"
Te6edf3classTff7b72=Ta5d6ff"my-0 text-gray-700 dark:text-zinc-300 font-medium"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-checkboxTb4b4b4>
Tb4b4b4<Tff7b72v-checkbox
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3dontShowEverTa5d6ff"
Tb4b4b4:Te6edf3labelTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'app.do_not_show_ever'Tb4b4b4, Ta5d6ff'Do not show ever again'Tb4b4b4)Ta5d6ff"
Te6edf3densityTff7b72=Ta5d6ff"compact"
Te6edf3hide-details
Te6edf3colorTff7b72=Ta5d6ff"red"
Te6edf3classTff7b72=Ta5d6ff"my-0 text-gray-700 dark:text-zinc-300 font-medium"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-checkboxTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72v-spacerTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-spacerTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"primary-chip px-8! h-10! rounded-xl!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3closeTa5d6ff"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"common.close"Tb4b4b4, Ta5d6ff"Close"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-card-actionsTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-cardTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72v-dialogTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"flex flex-col h-full bg-white dark:bg-zinc-950 overflow-hidden"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto px-6 md:px-12 py-10"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"max-w-4xl mx-auto"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-4 mb-8"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"p-2"Tb4b4b4>
Tb4b4b4<Tff7b72img Te6edf3srcTff7b72=Ta5d6ff"../public/favicons/favicon-512x512.png" Te6edf3classTff7b72=Ta5d6ff"w-16 h-16 object-contain" Te6edf3altTff7b72=Ta5d6ff"Logo" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72h1 Te6edf3classTff7b72=Ta5d6ff"text-4xl font-black text-gray-900 dark:text-white tracking-tighter uppercase mb-1"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"app.changelog_title"Tb4b4b4, Ta5d6ff"What's New"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72h1Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72span
Te6edf3classTff7b72=Ta5d6ff"font-black text-[10px] px-2 h-5 rounded-xs bg-blue-600 text-white inline-flex items-center"
Tb4b4b4>
vTff7b72{{ Te6edf3version Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 font-medium"Tb4b4b4>Full release historyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3loadingTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center justify-center py-20 space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72v-progress-circular Te6edf3indeterminate Te6edf3colorTff7b72=Ta5d6ff"blue" Te6edf3sizeTff7b72=Ta5d6ff"64"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-progress-circularTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3errorTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"flex flex-col items-center justify-center py-20 text-center space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72v-icon Te6edf3iconTff7b72=Ta5d6ff"mdi-alert-circle-outline" Te6edf3sizeTff7b72=Ta5d6ff"64" Te6edf3colorTff7b72=Ta5d6ff"red"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72v-iconTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-red-500 font-bold text-lg"Tb4b4b4>Tff7b72{{ Te6edf3error Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"primary-chip px-6!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3fetchChangelogTa5d6ff"Tb4b4b4>RetryTb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"changelog-content max-w-none prose dark:prose-invert pb-20"Tb4b4b4>
T8b949e<!-- eslint-disable-next-line vue/no-v-html -->
Tb4b4b4<Tff7b72div Te6edf3v-htmlTff7b72=Ta5d6ff"Te6edf3changelogHtmlTa5d6ff"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"ChangelogModal"Tb4b4b4,
Te6edf3propsTff7b72: Tb4b4b4{
Te6edf3appVersionTff7b72: Tb4b4b4{
Te6edf3typeTff7b72: Tffa657StringTb4b4b4,
Tff7b72defaultTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3visibleTff7b72: Tff7b72falseTb4b4b4,
Te6edf3loadingTff7b72: Tff7b72trueTb4b4b4,
Te6edf3errorTff7b72: Tff7b72nullTb4b4b4,
Te6edf3changelogHtmlTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3versionTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3dontShowAgainTff7b72: Tff7b72falseTb4b4b4,
Te6edf3dontShowEverTff7b72: Tff7b72falseTb4b4b4,
Te6edf3windowWidthTff7b72: Tff7b72typeof Tffa657window Tff7b72!== Ta5d6ff"undefined" Tff7b72? Tffa657windowTb4b4b4.Te6edf3innerWidth Tff7b72: T79c0ff1024Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3currentVersionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3version Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3appVersionTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3isPageTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3$routeTff7b72?Tb4b4b4.Te6edf3metaTff7b72?Tb4b4b4.Te6edf3isPage Tff7b72=== Tff7b72trueTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3dialogFullscreenTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3windowWidth Tff7b72< T79c0ff768Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3onWindowResize Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3windowWidth Tff7b72= Tffa657windowTb4b4b4.Te6edf3innerWidthTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"resize"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3onWindowResizeTb4b4b4, Tb4b4b4{ Te6edf3passiveTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isPageTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3fetchChangelogTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3beforeUnmountTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3onWindowResizeTb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3removeEventListenerTb4b4b4(Ta5d6ff"resize"Tb4b4b4, Tff7b72thisTb4b4b4.Te6edf3onWindowResizeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Tff7b72async Te6edf3showTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3visible Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3fetchChangelogTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3fetchChangelogTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loading Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3error Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/app/changelog"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3version Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3versionTb4b4b4;
T8b949e// Process HTML to make version headers look better
T8b949e// Find [x.x.x] and wrap in a styled span
Tff7b72let Te6edf3html Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3htmlTb4b4b4;
Te6edf3html Tff7b72= Te6edf3htmlTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/\[(\d+\.\d+\.\d+)\]/gTb4b4b4, Ta5d6ff'<span class="version-tag">$1</span>'Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3changelogHtml Tff7b72= Te6edf3htmlTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3error Tff7b72= Ta5d6ff"Failed to load changelog."Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loading Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3closeTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// mark as seen for current version automatically on close if not already marked
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3dontShowEver Tff7b72&& Tff7b72!Tff7b72thisTb4b4b4.Te6edf3dontShowAgainTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/app/changelog/seen"Tb4b4b4, Tb4b4b4{
Te6edf3versionTff7b72: Tff7b72thisTb4b4b4.Te6edf3currentVersion Tff7b72|| Ta5d6ff"0.0.0"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to auto-mark changelog as seen:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3markAsSeenTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3visible Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3markAsSeenTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3dontShowEverTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/app/changelog/seen"Tb4b4b4, Tb4b4b4{
Te6edf3versionTff7b72: Ta5d6ff"999.999.999"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to mark changelog as seen forever:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3dontShowAgainTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/app/changelog/seen"Tb4b4b4, Tb4b4b4{
Te6edf3versionTff7b72: Tff7b72thisTb4b4b4.Te6edf3currentVersionTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3errorTb4b4b4(Ta5d6ff"Failed to mark changelog as seen for this version:"Tb4b4b4, Te6edf3eTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3onVisibleUpdateTb4b4b4(Te6edf3valTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3valTb4b4b4) Tb4b4b4{
T8b949e// handle case where dialog is closed by clicking outside or ESC
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3markAsSeenTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72styleTb4b4b4>
Tb4b4b4@Tff7b72reference Ta5d6ff"../style.css"Tb4b4b4;
Tb4b4b4.T56d364changelog-dialog Tb4b4b4.T56d364v-overlay__content Tb4b4b4{
Tff7b72border-radiusTb4b4b4: T79c0ff0.5Tffa657rem Tff7b72!importantTb4b4b4;
Tff7b72overflowTb4b4b4: Tff7b72hiddenTb4b4b4;
Tb4b4b4}
Tb4b4b4@Tff7b72media Tff7b72(Tff7b72max-widthTff7b72: Tff7b72767pxTff7b72) Tb4b4b4{
Tb4b4b4.T56d364changelog-dialog Tb4b4b4.T56d364v-overlay__content Tb4b4b4{
Tff7b72border-radiusTb4b4b4: T79c0ff0 Tff7b72!importantTb4b4b4;
Tff7b72max-heightTb4b4b4: T79c0ff100Te6edf3dvh Tff7b72!importantTb4b4b4;
Tff7b72marginTb4b4b4: T79c0ff0 Tff7b72!importantTb4b4b4;
Tff7b72widthTb4b4b4: T79c0ff100Tffa657% Tff7b72!importantTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tb4b4b4{
@apply leading-relaxedTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72h1 Tb4b4b4{
@apply text-3xl font-black mt-2 mb-6 text-gray-900 Te6edf3darkTb4b4b4:Tff7b72textTff7b72-Tff7b72white Te6edf3tracking-tight Tff7b72uppercase Tff7b72borderTff7b72-Te6edf3b-2 Tff7b72borderTff7b72-Tff7b72grayT79c0ff-100 Te6edf3darkTff7b72:Tff7b72borderTff7b72-Te6edf3zinc-800 Te6edf3pb-2Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72h2 Tb4b4b4{
@apply flex items-center gap-3 text-xl font-bold mt-8 mb-4 text-gray-900 Te6edf3darkTb4b4b4:Tff7b72textTff7b72-Tff7b72whiteTb4b4b4;
Tb4b4b4}
T8b949e/* Style for [v4.0.0] style headers in markdown */
Tb4b4b4.T56d364changelog-content Tff7b72h2Tb4b4b4::Tf0883ebefore Tb4b4b4{
Tff7b72contentTb4b4b4: Ta5d6ff"VERSION"Tb4b4b4;
@apply text-[10px] font-black bg-blue-500 text-white px-1.5 py-0.5 rounded-xs tracking-tighterTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72h3 Tb4b4b4{
@apply text-lg font-bold mt-6 mb-3 text-blue-600 Te6edf3darkTb4b4b4:Tff7b72textTff7b72-Tff7b72blueT79c0ff-400 Tff7b72flex Te6edf3items-center Tff7b72gapT79c0ff-2Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72h3Tb4b4b4::Tf0883ebefore Tb4b4b4{
Tff7b72contentTb4b4b4: Ta5d6ff"•"Tb4b4b4;
@apply text-blue-500 font-blackTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72p Tb4b4b4{
@apply my-4 text-gray-700 Te6edf3darkTb4b4b4:Tff7b72textTff7b72-Te6edf3zinc-300 Te6edf3leading-relaxedTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72ul Tb4b4b4{
@apply my-6 space-y-3 list-disc pl-6Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72li Tb4b4b4{
@apply text-gray-600 Te6edf3darkTb4b4b4:Tff7b72textTff7b72-Te6edf3zinc-400 Tff7b72transitionTff7b72-Te6edf3colors Te6edf3hoverTff7b72:Tff7b72textTff7b72-Tff7b72grayT79c0ff-900 Te6edf3darkTff7b72:Te6edf3hoverTff7b72:Tff7b72textTff7b72-Tff7b72whiteTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72strong Tb4b4b4{
@apply font-bold text-gray-900 Te6edf3darkTb4b4b4:Tff7b72textTff7b72-Te6edf3zinc-100Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72code Tb4b4b4{
@apply bg-blue-50 Te6edf3darkTb4b4b4:Te6edf3bg-blue-900Tff7b72/T79c0ff20 Te6edf3px-1T79c0ff.5 Te6edf3py-0T79c0ff.5 Te6edf3rounded-xs Tff7b72textTff7b72-Tff7b72blueT79c0ff-700 Te6edf3darkTff7b72:Tff7b72textTff7b72-Tff7b72blueT79c0ff-300 Tff7b72fontTff7b72-Te6edf3mono Tff7b72textTff7b72-Tb4b4b4[T79c0ff0.85Tffa657emTb4b4b4] Tff7b72border Tff7b72borderTff7b72-Tff7b72blueT79c0ff-100 Te6edf3darkTff7b72:Tff7b72borderTff7b72-Tff7b72blueT79c0ff-800Tff7b72/T79c0ff30Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72hr Tb4b4b4{
@apply my-10 border-gray-100 Te6edf3darkTb4b4b4:Tff7b72borderTff7b72-Te6edf3zinc-800Tb4b4b4;
Tb4b4b4}
T8b949e/* Highlight tags like [4.0.0] if they are inside the text */
Tb4b4b4.T56d364changelog-content Tff7b72h2 Tb4b4b4{
Tff7b72counter-incrementTb4b4b4: Te6edf3version-counterTb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tff7b72h2 Tb4b4b4{
@apply py-2 px-4 bg-gray-50 Te6edf3darkTb4b4b4:Te6edf3bg-zinc-800Tff7b72/T79c0ff50 Te6edf3rounded-md Tff7b72border Tff7b72borderTff7b72-Tff7b72grayT79c0ff-100 Te6edf3darkTff7b72:Tff7b72borderTff7b72-Te6edf3zinc-800Tb4b4b4;
Tb4b4b4}
Tb4b4b4.T56d364changelog-content Tb4b4b4.T56d364version-tag Tb4b4b4{
@apply bg-blue-600 text-white px-2 py-0.5 rounded-xs font-black text-sm tracking-tighterTb4b4b4;
Tb4b4b4}
Tb4b4b4<Tb4b4b4/Tff7b72styleTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────